package com.zmn.oms.third.haobai;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.zmn.common.constant.GlobalConsts;
import com.zmn.oms.common.constant.OrderConsts;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.w3c.dom.ls.LSOutput;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.regex.Pattern;

/**
 * @author: huangyifeng
 * @description: 基本常量数据
 * @create: 2020-03-09 17:35
 **/
@Component
public class HaobaiConsts {

    // 合同编号
    public static final String HAOBAI_CONTRACT_CODE = "UDHBA1900293CGN00";

    // 公司组织机构代码
    public static final String ZMN_ORGANIZATION_CODE = "915000003204475734";

    // 加密时所需要的密钥
    public static final String HAOBAI_SERECT = "8288da29802c40c889a60a6749be6523";

    // 号百api接口
    public static String HAOBAI_REQUEST_URL;

    @Value("${haobai.url.api-invok:''}")
    private void getHaobaiApiUrl(String url){
        this.HAOBAI_REQUEST_URL = url;
    }

    //1：网页、2：APP、3：微信、4：电话、5：线下
    public static final int CHANNEL_ORDER_WAY_ONE = 1;
    public static final int CHANNEL_ORDER_WAY_TWO = 2;
    public static final int CHANNEL_ORDER_WAY_THREE = 3;
    public static final int CHANNEL_ORDER_WAY_FOUR = 4;
    public static final int CHANNEL_ORDER_WAY_FIVE= 5;

    /* ===== 号百订单状态 ===== */
    public static final String STATUS_CANCEL = "1";     // 关闭
    public static final String STATUS_COMPLETE = "2";   // 完成

    // 1有效订单  0无效订单
    public static final int ORDER_EFFECTIVE = 1;
    public static final int ORDER_INVALID = 0;

    /**
     * 获取状态名称
     * @param statusCode
     * @return
     */
    public static final String getStatusName(String statusCode) {
        switch (statusCode) {
            case STATUS_CANCEL:
                return "关闭";
            case STATUS_COMPLETE:
                return "完成";
            default:
                return String.format("未知状态[%s]", statusCode);
        }
    }

    // 家电维修
    public static final String APPLIANCE_REPAIR_CODE = "02010501Y";
    public static final String APPLIANCE_REPAIR_NAME = "家电维修";

    public static final String APPLIANCE_CLEAN_CODE = "BOSS_JDQX";
    public static final String APPLIANCE_CLEAN_NAME = "家电清洗";


    public static Map<String, Integer> CHANNEL_ID_MAP = new HashMap<>();
    static {
        CHANNEL_ID_MAP.put("1024", 1024);
        CHANNEL_ID_MAP.put("1180", 1180);
        CHANNEL_ID_MAP.put("1204", 1204);
        CHANNEL_ID_MAP.put("1188", 1188);
        CHANNEL_ID_MAP.put("1260", 1260);
        CHANNEL_ID_MAP.put("1195", 1195);
        CHANNEL_ID_MAP.put("1450", 1450);
        CHANNEL_ID_MAP.put("1521", 1521);
        CHANNEL_ID_MAP.put("1473", 1473);
        CHANNEL_ID_MAP.put("1297", 1297);
        CHANNEL_ID_MAP.put("1331", 1331);
        CHANNEL_ID_MAP.put("1373", 1373);
        CHANNEL_ID_MAP.put("1222", 1222);
        CHANNEL_ID_MAP.put("1447", 1447);
        CHANNEL_ID_MAP.put("1258", 1258);
        CHANNEL_ID_MAP.put("1280", 1280);
        CHANNEL_ID_MAP.put("1299", 1299);
        CHANNEL_ID_MAP.put("1333", 1333);
        CHANNEL_ID_MAP.put("1425", 1425);
        CHANNEL_ID_MAP.put("32903", 32903);
        CHANNEL_ID_MAP.put("1194", 1194);
        CHANNEL_ID_MAP.put("1203", 1203);
        CHANNEL_ID_MAP.put("1219", 1219);
        CHANNEL_ID_MAP.put("1306", 1306);
        CHANNEL_ID_MAP.put("1465", 1465);
        CHANNEL_ID_MAP.put("1484", 1484);
        CHANNEL_ID_MAP.put("10109", 10109);
    }

    public static boolean isHaobaiChannel(Integer channelId) {
        return CHANNEL_ID_MAP.get(String.valueOf(channelId)) != null;
    }

    /**
     * 需要同步订单的城市
     */
    private static final Map<String, Object> HAOBAI_SYNC_CITYS = new HashMap<>(20);
    private static final Pattern REGEX_SYNC_CITYS = Pattern.compile("^(?:34|61|36)\\d{4}$"); // 34:安徽省    61:陕西省   36:江西省
    static {
        Map<String, Object> map = HAOBAI_SYNC_CITYS;
        map.put("440300", map);
        map.put("450100", map);
        map.put("450200", map);
        map.put("450300", map);
        map.put("450900", map);
        map.put("450400", map);
        map.put("450500", map);
        map.put("450800", map);
        map.put("450700", map);
        map.put("451000", map);
        map.put("451200", map);
        map.put("451300", map);
        map.put("451100", map);
        map.put("450600", map);
        map.put("451400", map);
        map.put("320400", map);
        map.put("530100", map);
        map.put("440600", map);
        map.put("441900", map);
        map.put("310100", map);
    }

    /**
     * 是否是需要同步订单的城市
     * @param cityId
     * @return
     */
    public static boolean isNeedSyncOrder(Integer cityId) {
        if (cityId == null) {
            return false;
        }

        String cityIdStr = String.valueOf(cityId);
        if (REGEX_SYNC_CITYS.matcher(cityIdStr).matches()) {
            return true;
        }

        return HAOBAI_SYNC_CITYS.get(cityIdStr) != null;
    }


    public static void main(String[] args) {
        int cityId = 610100;
        System.out.println(isNeedSyncOrder(cityId));
    }

    /**
     * 有效订单城市 effectivity
     */
    private static final Map<String, Object> EFFECTIVITY_CITYS = new HashMap<>(20);
    static {
        Map<String, Object> map = EFFECTIVITY_CITYS;
        map.put("440300", map);
        map.put("450100", map);
        map.put("320400", map);
        map.put("530100", map);
        map.put("440600", map);
        map.put("441900", map);
        map.put("310100", map);
        map.put("610100", map);
        map.put("340100", map);
        map.put("360100", map);
    }
    /**
     * 是否是有效订单的城市
     * @param cityId
     * @return
     */
    public static boolean isEffectivityOrder(Integer cityId) {
        return EFFECTIVITY_CITYS.get(String.valueOf(cityId)) != null;
    }

    // 产品映射
    private static Map<String, String> HAOBAI_PRODUCT_MAPPING = new HashMap<>(40);
    static {
        // 家电清洗
        String qx_kongtiao_1 = "BCJDQXC01ZQQ01"; // 挂机空调
        String qx_kongtiao_2 = "BCJDQXC01ZQQ02"; // 柜机空调
        String qx_kongtiao_3 = "BCJDQXC01ZQQ03"; // 中央空调
        String qx_youyanji_1 = "BCJDQXC02ZQQ01"; // 油烟机-不拆洗
        String qx_xiyiji_1 = "BCJDQXC03ZQQ01"; // 滚筒洗衣机-免拆
        String qx_bingxiang_1 = "BCJDQXC04ZQQ01"; // 双门冰箱
        String qx_bingxiang_2 = "BCJDQXC04ZQQ02"; // 三门冰箱
        String qx_bingxiang_3 = "BCJDQXC04ZQQ03"; // 对开门冰箱
        String qx_weibolu_1 = "BCJDQXC05ZQQ01"; // 微波炉
        String qx_ranqizao_1 = "BCJDQXC06ZQQ01"; // 燃气灶
        String qx_yinshuiji_1 = "BCJDQXC07ZQQ01"; // 饮水机
        String qx_reshuiqi_1 = "BCJDQXC09ZQQ01"; // 燃气热水器
        String qx_reshuiqi_2 = "BCJDQXC09ZQQ02"; // 电热水器
        String qx_taocan_1 = "BCJDQXC12ZQQ01"; // 空调+油烟机清洗组合+管道疏通
        String qx_taocan_2 = "BCHDBKX02ZQQ03"; // 空调清洗套餐
        // 家电维修
        String wx_kongtiao_1 = "BCJDWXA01ZQQ01"; // 空调维修
        String wx_bingxiang_1 = "BCJDWXA02ZQQ01"; // 冰箱维修
        String wx_xiyiji_1 = "BCJDWXA03ZQQ01"; // 洗衣机维修
        String wx_youyanji_1 = "BCJDWXA04ZQQ01"; // 油烟机维修
        String wx_dianshiji_1 = "BCJDWXA05ZQQ01"; // 电视机维修
        String wx_reshuiqi_1 = "BCJDWXA06ZQQ01"; // 热水器维修
        String wx_ranqizao_1 = "BCJDWXA07ZQQ01"; // 燃气灶维修
        String wx_xiaodugui_1 = "BCJDWXA07ZQQ02"; // 消毒柜维修
        String wx_weibolu_1 = "BCJDWXA07ZQQ03"; // 微波炉维修
        String wx_yinshuiji_1 = "BCJDWXA08ZQQ01"; // 饮水机维修
        // 家修（房屋修缮）
        String jx_shuiguan_1 = "BCJJXSS02ZQQ03"; // 水管维修
        String jx_dianlu_1 = "BCJJXSS02ZQQ05"; // 电路维修
        String jx_weiyu_1 = "BCJJXSS02ZQQ07"; // 卫浴、洁具维修
        String jx_fangshui_1 = "BCJJXSS03ZQQ02"; // 防水补漏
        String jx_guandao_1 = "BCJJXSS04ZQQ02"; // 管道疏通
        // 数码维修
        String sm_diannao_1 = "BCSMWXB01ZQQ01"; // 电脑
        String jx_touyingyi_1 = "BCSMWXB03ZQQ01"; // 投影仪
        String jx_dayinji_1 = "BCSMWXB04ZQQ01"; // 打印机

        Map<String, String> map = HAOBAI_PRODUCT_MAPPING;

        // 家电清洗
        map.put("10834", qx_kongtiao_1);
        map.put("10833", qx_kongtiao_2);
        map.put("11144", qx_kongtiao_3);
        map.put("10846", qx_youyanji_1);
        map.put("10840", qx_xiyiji_1);
        map.put("10837", qx_bingxiang_1);
        map.put("10838", qx_bingxiang_2);
        map.put("10839", qx_bingxiang_3);
        map.put("10847", qx_weibolu_1);
        map.put("10845", qx_ranqizao_1);
        map.put("10848", qx_yinshuiji_1);
        map.put("10843", qx_reshuiqi_1);
        map.put("10841", qx_reshuiqi_2);
        map.put("11342", qx_taocan_1);
        map.put("11084", qx_taocan_2);
        // 家电维修
        map.put("10763", wx_kongtiao_1);
        map.put("10764", wx_kongtiao_1);
        map.put("10765", wx_kongtiao_1);
        map.put("10766", wx_bingxiang_1);
        map.put("10767", wx_xiyiji_1);
        map.put("10773", wx_youyanji_1);
        map.put("10768", wx_dianshiji_1);
        map.put("10769", wx_reshuiqi_1);
        map.put("10770", wx_reshuiqi_1);
        map.put("10771", wx_reshuiqi_1);
        map.put("10981", wx_reshuiqi_1);
        map.put("10772", wx_ranqizao_1);
        map.put("10789", wx_xiaodugui_1);
        map.put("10774", wx_weibolu_1);
        map.put("10775", wx_yinshuiji_1);
        // 家修（房屋修缮）
        map.put("10105", jx_shuiguan_1);
        map.put("10146", jx_dianlu_1);
        map.put("10145", jx_weiyu_1);
        map.put("10868", jx_weiyu_1);
        map.put("10869", jx_weiyu_1);
        map.put("10870", jx_weiyu_1);
        map.put("10871", jx_weiyu_1);
        map.put("10872", jx_weiyu_1);
        map.put("10873", jx_weiyu_1);
        map.put("10874", jx_weiyu_1);
        map.put("10875", jx_weiyu_1);
        map.put("10876", jx_weiyu_1);
        map.put("10877", jx_weiyu_1);
        map.put("10878", jx_weiyu_1);
        map.put("10879", jx_weiyu_1);
        map.put("10880", jx_weiyu_1);
        map.put("10881", jx_weiyu_1);
        map.put("10882", jx_weiyu_1);
        map.put("10913", jx_fangshui_1);
        map.put("10914", jx_fangshui_1);
        map.put("10915", jx_fangshui_1);
        map.put("10916", jx_fangshui_1);
        map.put("10917", jx_fangshui_1);
        map.put("10918", jx_fangshui_1);
        map.put("10919", jx_fangshui_1);
        map.put("10920", jx_fangshui_1);
        map.put("10977", jx_fangshui_1);
        map.put("10906", jx_guandao_1);
        map.put("10907", jx_guandao_1);
        map.put("10908", jx_guandao_1);
        map.put("10909", jx_guandao_1);
        map.put("10910", jx_guandao_1);
        map.put("10972", jx_guandao_1);
        map.put("10911", jx_guandao_1);
        map.put("10912", jx_guandao_1);
        // 数码维修
        map.put("10829", sm_diannao_1);
        map.put("10828", jx_touyingyi_1);
        map.put("10827", jx_dayinji_1);

        // 家电清洗-扩展，通过产品大类和服务类型匹配
        map.put("10011000", qx_kongtiao_1);
        map.put("10012406", qx_youyanji_1);
        map.put("10012402", qx_xiyiji_1);
        map.put("10012401", qx_bingxiang_1);
        map.put("10012405", qx_ranqizao_1);
        map.put("10012407", qx_yinshuiji_1);
        map.put("10012404", qx_reshuiqi_1);
        map.put("10013027", qx_taocan_1);
        // 家电维修-扩展，通过产品大类和服务类型匹配
        map.put("10021000", wx_kongtiao_1);
        map.put("10022406", wx_youyanji_1);
        map.put("10022402", wx_xiyiji_1);
        map.put("10022401", wx_bingxiang_1);
        map.put("10022405", wx_ranqizao_1);
        map.put("10022407", wx_yinshuiji_1);
        map.put("10022404", wx_reshuiqi_1);
        map.put("10022403", wx_dianshiji_1);

    }

    /**
     * 获取对应的号百产品ID
     * @param productId
     * @return
     */
    public static String getProductCode(Integer productId, Integer categOneId, Integer servCategId) {
        String productCode = HAOBAI_PRODUCT_MAPPING.get(String.valueOf(productId));
        if (productCode != null ) {
            return productCode;
        }

        String key = String.format("%s%s", servCategId, categOneId);
        productCode = HAOBAI_PRODUCT_MAPPING.get(key);
        if (productCode != null ) {
            return productCode;
        }

        if (Objects.equals(GlobalConsts.SERV_CATEG_CLEAN, servCategId)) {
            return "BCJDQXC01ZQQ01";    // 挂机空调清洗
        }

        return "BCJDWXA01ZQQ01"; // 空调维修
    }

}
